using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._TopographicProductionTools._DataManagement._Validation
{
    /// <summary>
    /// <para>GAIT</para>
    /// <para>Validates data using the Geospatial Analysis Integrity Tool (GAIT), checking geometry, feature codes, attribute values and domains, and metadata.</para>
    /// <para>使用地理空间分析完整性工具 （GAIT） 验证数据，检查几何、要素代码、属性值和属性域以及元数据。</para>
    /// </summary>    
    [DisplayName("GAIT")]
    public class GAIT : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public GAIT()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The features to validate.</para>
        /// <para>要验证的功能。</para>
        /// </param>
        /// <param name="_gait_exe">
        /// <para>GAIT Executable</para>
        /// <para>The path to the GAIT executable file.</para>
        /// <para>GAIT 可执行文件的路径。</para>
        /// </param>
        /// <param name="_folder">
        /// <para>Output Directory</para>
        /// <para>The shapefile export directory.</para>
        /// <para>shapefile 导出目录。</para>
        /// </param>
        /// <param name="_schema">
        /// <para>Attribution Schema</para>
        /// <para>The data model that corresponds to the data displayed in the input feature layer.</para>
        /// <para>与输入要素图层中显示的数据相对应的数据模型。</para>
        /// </param>
        /// <param name="_project">
        /// <para>Project Name</para>
        /// <para>The name of the project. The project contains validation information, such as the checks run on the data and the results.</para>
        /// <para>项目的名称。该项目包含验证信息，例如对数据和结果运行的检查。</para>
        /// </param>
        /// <param name="_format">
        /// <para>Inspection Profile</para>
        /// <para>The set of checks to run on the data. This is specific to the data model listed in the attribution schema.</para>
        /// <para>要对数据运行的检查集。这特定于归因架构中列出的数据模型。</para>
        /// </param>
        /// <param name="_metadata">
        /// <para>Metadata Mapping Table</para>
        /// <para><xdoc>
        ///   <para>The metadata mapping table that corresponds to the data model of the input feature layer and the attribution schema.</para>
        ///   <bulletList>
        ///     <bullet_item>Esri metadata—Esri metadata</bullet_item><para/>
        ///     <bullet_item>Intergraph metadata—Intergraph metadata</bullet_item><para/>
        ///     <bullet_item>MGCP NGA metadata—MGCP NGA metadata</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>与输入要素图层的数据模型和归因方案相对应的元数据映射表。</para>
        ///   <bulletList>
        ///     <bullet_item>Esri 元数据 - Esri 元数据</bullet_item><para/>
        ///     <bullet_item>鹰图元数据 - 鹰图元数据</bullet_item><para/>
        ///     <bullet_item>MGCP NGA 元数据 - MGCP NGA 元数据</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_silent">
        /// <para>Run Silent</para>
        /// <para><xdoc>
        ///   <para>Indicates the amount of output messages to return from GAIT.exe.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Limit messaging from GAIT.exe. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Run GAIT.exe in verbose mode.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示要从GAIT.exe返回的输出消息量。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 限制来自GAIT.exe的消息。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 在详细模式下运行GAIT.exe。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        public GAIT(List<object> _in_features, object _gait_exe, object _folder, object _schema, object _project, object _format, _metadata_value _metadata, _silent_value _silent)
        {
            this._in_features = _in_features;
            this._gait_exe = _gait_exe;
            this._folder = _folder;
            this._schema = _schema;
            this._project = _project;
            this._format = _format;
            this._metadata = _metadata;
            this._silent = _silent;
        }
        public override string ToolboxName => "Topographic Production Tools";

        public override string ToolName => "GAIT";

        public override string CallName => "topographic.GAIT";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_features, _gait_exe, _folder, _schema, _project, _format, _metadata.GetGPValue(), _silent.GetGPValue(), _reviewer_workspace, _specfile, _out_featurelayers];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The features to validate.</para>
        /// <para>要验证的功能。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_features { get; set; }


        /// <summary>
        /// <para>GAIT Executable</para>
        /// <para>The path to the GAIT executable file.</para>
        /// <para>GAIT 可执行文件的路径。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("GAIT Executable")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _gait_exe { get; set; }


        /// <summary>
        /// <para>Output Directory</para>
        /// <para>The shapefile export directory.</para>
        /// <para>shapefile 导出目录。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Directory")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _folder { get; set; }


        /// <summary>
        /// <para>Attribution Schema</para>
        /// <para>The data model that corresponds to the data displayed in the input feature layer.</para>
        /// <para>与输入要素图层中显示的数据相对应的数据模型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Attribution Schema")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _schema { get; set; }


        /// <summary>
        /// <para>Project Name</para>
        /// <para>The name of the project. The project contains validation information, such as the checks run on the data and the results.</para>
        /// <para>项目的名称。该项目包含验证信息，例如对数据和结果运行的检查。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Project Name")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _project { get; set; }


        /// <summary>
        /// <para>Inspection Profile</para>
        /// <para>The set of checks to run on the data. This is specific to the data model listed in the attribution schema.</para>
        /// <para>要对数据运行的检查集。这特定于归因架构中列出的数据模型。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Inspection Profile")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _format { get; set; }


        /// <summary>
        /// <para>Metadata Mapping Table</para>
        /// <para><xdoc>
        ///   <para>The metadata mapping table that corresponds to the data model of the input feature layer and the attribution schema.</para>
        ///   <bulletList>
        ///     <bullet_item>Esri metadata—Esri metadata</bullet_item><para/>
        ///     <bullet_item>Intergraph metadata—Intergraph metadata</bullet_item><para/>
        ///     <bullet_item>MGCP NGA metadata—MGCP NGA metadata</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>与输入要素图层的数据模型和归因方案相对应的元数据映射表。</para>
        ///   <bulletList>
        ///     <bullet_item>Esri 元数据 - Esri 元数据</bullet_item><para/>
        ///     <bullet_item>鹰图元数据 - 鹰图元数据</bullet_item><para/>
        ///     <bullet_item>MGCP NGA 元数据 - MGCP NGA 元数据</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Metadata Mapping Table")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _metadata_value _metadata { get; set; }

        public enum _metadata_value
        {
            /// <summary>
            /// <para>Esri metadata</para>
            /// <para>Esri metadata—Esri metadata</para>
            /// <para>Esri 元数据 - Esri 元数据</para>
            /// </summary>
            [Description("Esri metadata")]
            [GPEnumValue("META_ESRI")]
            _META_ESRI,

            /// <summary>
            /// <para>Intergraph metadata</para>
            /// <para>Intergraph metadata—Intergraph metadata</para>
            /// <para>鹰图元数据 - 鹰图元数据</para>
            /// </summary>
            [Description("Intergraph metadata")]
            [GPEnumValue("META_INGR")]
            _META_INGR,

            /// <summary>
            /// <para>MGCP NGA metadata</para>
            /// <para>MGCP NGA metadata—MGCP NGA metadata</para>
            /// <para>MGCP NGA 元数据 - MGCP NGA 元数据</para>
            /// </summary>
            [Description("MGCP NGA metadata")]
            [GPEnumValue("META_MGCPNGA")]
            _META_MGCPNGA,

        }

        /// <summary>
        /// <para>Run Silent</para>
        /// <para><xdoc>
        ///   <para>Indicates the amount of output messages to return from GAIT.exe.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Limit messaging from GAIT.exe. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Run GAIT.exe in verbose mode.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指示要从GAIT.exe返回的输出消息量。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 限制来自GAIT.exe的消息。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 在详细模式下运行GAIT.exe。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Run Silent")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _silent_value _silent { get; set; }

        public enum _silent_value
        {
            /// <summary>
            /// <para>SILENT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("SILENT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>VERBOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("VERBOSE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Reviewer Workspace</para>
        /// <para>The workspace to write the output features. Each shapefile result record is written to the reviewer table in this workspace.</para>
        /// <para>用于编写输出要素的工作空间。每个 shapefile 结果记录都将写入此工作空间中的审阅者表。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Reviewer Workspace")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _reviewer_workspace { get; set; } = null;


        /// <summary>
        /// <para>Custom Inspection File</para>
        /// <para>A file that defines custom checks.</para>
        /// <para>定义自定义检查的文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Custom Inspection File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _specfile { get; set; } = null;


        /// <summary>
        /// <para>Output Feature Layers</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Layers")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _out_featurelayers { get; set; }


        public GAIT SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}